home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
TeX 1995 July
/
TeX CD-ROM July 1995 (Disc 1)(Walnut Creek)(1995).ISO
/
graphics
/
pstex
/
examples
/
postscri.sty
< prev
next >
Wrap
Text File
|
1992-01-27
|
4KB
|
118 lines
%
% Postscriptbox and psbox macros for use with dvips and pstex.
%
% Neil Hunt, Schlumberger Palo Alto Research.
% hunt@spar.slb.com
%
% HISTORY
%
% $Log: postscript.sty,v $
% Revision 1.5 89/01/09 13:05:38 hunt
% Updated to use a single .psz file per job rather than a .tps file
% for each included figure.
%
% Revision 1.4 88/09/20 13:12:18 hunt
% Cosmetic changes
%
% Revision 1.3 88/08/04 12:33:19 hunt
% A new psbox feature has been added for use with pstex:
% This replaces the old psbox, and simplifies things a lot.
%
% Revision 1.2 88/08/04 09:50:46 hunt
% Added RXB's psbox hacks:
% {1} 18-Apr-88 Rafael Bracho (rxb) at Schlumberger Austin Systems Center
% The postscriptbox macros were created by Neil Hunt at SPAR, I've
% added the psbox ones to use the InsertFile special. Since I
% fixed InsertFile, I don't know if we still need the postscriptbox
% special, though.
%
% Revision 1.1 88/08/04 09:41:01 hunt
% Initial revision - useful with early embed program versions.
%
%
% Primitive: postscriptbox macros.
% ===============================
%
% \postscriptbox{w}{h}{file} Box of size w, h.
% \postscriptbox(w,h){file} Picture env. box of size w, h.
%
\def \postscriptbox{\@ifnextchar ({\@postscriptpicbox}{\@postscriptbox}}
\def \@postscriptpicbox(#1,#2)#3{%
\@postscriptbox{#1\unitlength}{#2\unitlength}{#3}}
\def \@postscriptbox#1#2#3{% <width> <height> <file>
\@xdim=#1\divide\@xdim 1000\multiply\@xdim\mag%
\@ydim=#2\divide\@ydim 1000\multiply\@ydim\mag%
\mbox{\vbox to #2{\vfil\hbox to #1%
{\special{postscriptbox {\the\@xdim}{\the\@ydim}{#3}}\hfil}}}}
%
% Higher level macros.
% ===================
%
% \psbox[dimensions-options]{psfile}
% 1 \psbox writes to .aux ``\psboxaux[dimensions-options]{psfile}''
% 2 pstex reads .aux files, writes \pssize macros to .psz file.
% 3 .psz file is input, defines size macros by figure name.
% 4 \psbox invokes size macros for each figure.
%
% Counters to disambiguate multiple references to the same figure.
% t@psctr counts multiple occurrences of psboxaux's in .aux file.
% f@psctr counts multiple occurrences of pssize's in .psz file.
\newcounter{t@psctr}
\newcounter{f@psctr}
\def\psbox{\@ifnextchar [{\@psbox}{\@psbox[]}}
%
% First we write an entry on the aux file: psboxaux[args]{filename}
% Next we generate the handle f@name used for this figure:
% we check whether the tag `t@<filename>' is defined:
% If not, this is the first time PS file <filename> has been used,
% so we def \f@name = f@<filename>, and define the tag t@<filename>.
% Otherwise, this filename has been used before, and we will add
% a unique number to the name to disambiguate:
% we def \f@name = fN@<filename> where N is the value of t@psctr++.
% Now we try to access the \postscriptbox macro which is the expansion
% of \f@name. If \f@name is undefined, we write a warning, and a placeholder.
%
\def\@psbox[#1]#2{%
\if@filesw\immediate\write\@auxout{\string\psboxaux{#1}{#2}}\fi
\@ifundefined{t@#2}%
{\def\f@name{f@#2}\global\@namedef{t@#2}{\relax}}% % t@#2 undef'ed
{\def\f@name{f\arabic{t@psctr}@#2}\stepcounter{t@psctr}}% t@#2 defined
\@ifundefined{\f@name}{%
\framebox[2in]{Figure {\tt #2}\rule[-1in]{0in}{2in}}% % \f@name undef
\@warning{Figure `#2' on page \thepage \space undefined}}%
{\csname \f@name \endcsname}} % \f@name def'd
%
% Prepare to read the .aux file:
% Define psboxaux as null; it is only used as a flag for pstex.
%
\let\psboxaux\@gobbletwo
%
% Prepare to read the .psz file:
% Define \pssize as a macro to build f@name in an identical manner to
% above, and then define \f@name as the proper \postscriptbox macro.
%
\def\pssize#1#2#3{%
\@ifundefined{f@#3}%
{\def\f@name{f@#3}}% % f@#2 undef'ed
{\def\f@name{f\arabic{f@psctr}@#3}\stepcounter{f@psctr}}% f@#2 defined
\global\@namedef{\f@name}{\postscriptbox{#1}{#2}{#3}}}
%
% Read the .psz file to define the sizes for each figure.
%
\@input{\jobname.psz}